// 对于非负整数 X 而言，X 的数组形式是每位数字按从左到右的顺序形成的数组。例如，如果 X = 1231，那么其数组形式为 [1,2,3,1]。

// 给定非负整数 X 的数组形式 A，返回整数 X+K 的数组形式。

//  

// 示例 1：

// 输入：A = [1,2,0,0], K = 34
// 输出：[1,2,3,4]
// 解释：1200 + 34 = 1234
// 解释 2：

// 输入：A = [2,7,4], K = 181
// 输出：[4,5,5]
// 解释：274 + 181 = 455
// 示例 3：

// 输入：A = [2,1,5], K = 806
// 输出：[1,0,2,1]
// 解释：215 + 806 = 1021
// 示例 4：

// 输入：A = [9,9,9,9,9,9,9,9,9,9], K = 1
// 输出：[1,0,0,0,0,0,0,0,0,0,0]
// 解释：9999999999 + 1 = 10000000000
//  

// 提示：

// 1 <= A.length <= 10000
// 0 <= A[i] <= 9
// 0 <= K <= 10000
// 如果 A.length > 1，那么 A[0] != 0

#include <vector>

using namespace std;

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& A, int K) {
        int n = A.size();
        A[n-1] += K;
        int k{0};
        for (int i{0}; i < n; ++i) {
            A[n-1-i] = A[n-1-i] + k;
            k = 0;
            if (A[n-1-i] >= 10) {
                k = A[n-1-i] / 10; // 除最后一位前面的
                A[n-1-i] %= 10; // 取余
            } 
        }
        // 如果k 过大
        while (k != 0) {
            A.insert(A.begin(), k % 10);
            k = k / 10;
        }
        return A;
    }
};

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& A, int K) {
        vector<int> ret{A};
        int carry{0};
        int n = ret.size();
        for (int i{n - 1}; i >= 0; --i) {
            int a = K % 10;
            K /= 10;
            int sum = a + ret[i] + carry;
            carry = sum / 10;
            ret[i] = sum % 10;
        }
        while (K || carry) {
            int a = K % 10;
            K /= 10;
            int sum = a + carry;
            carry = sum / 10;
            ret.insert(ret.begin(), sum % 10);
        }
        return ret;
    }
};

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& A, int K) {
        vector<int> ret{A};
        int carry{0};
        int n = ret.size();
        for (int i{n - 1}; i >= 0; --i) {
            int sum = K % 10 + ret[i];
            K /= 10;
            K += sum / 10; // add carry to K
            ret[i] = sum % 10;
        }
        while (K) {
            ret.insert(ret.begin(), K % 10);
            K /= 10;
        }
        return ret;
    }
};